package com.mjk.generate;

import com.mjk.common.core.jdbc.ctable.ShardingTableService;
import com.mjk.common.core.jdbc.util.ExampleBuilderUtil;
import com.mjk.datasource.model.MiProperties;
import com.mjk.generate.model.SysRoleUser;
import com.mjk.manager.amis.core.model.SysMenu;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;

/**
 * 表相关生成工具 测试类
 *  去除了在项目运行时候生成example，根据表构建model，根据model刷新表结构功能
 *  改功能放入到 测试工具类中，在开发中调用下面的接口生成
 *  启动测试方法会调用 ExampleStart 启动类， 配置文件使用的是test/resource下面的
 */
@SpringBootTest
@AutoConfigureMockMvc
public class BeeModelGenerate {

    @Autowired
    private ShardingTableService shardingTableService;

    /**
     * 根据表结构创建对应的model类
     **/
     @Test
    public void generate() {
//        Set<Class<?>> clazzs = ClassUtil.scanPackageBySuper("com.mjk.generate.model",false, BaseEntity.class);
//        for(Class clazz : clazzs) {
//            shardingTableService.createModel((BaseEntity) ReflectionUtils.newInstance(clazz));
//        }
         shardingTableService.createModel(new SysRoleUser());
    }

    /**
     * 根据model字段刷新表结构
     */
    @Test
    public void refreshTableStruct() {
//        Set<Class<?>> clazzs = ClassUtil.scanPackageBySuper("com.mjk.generate.model",false, BaseEntity.class);
//        for(Class clazz : clazzs) {
//            try {
//                shardingTableService.createTable((BaseEntity) BeanUtils.getObject(clazz));
//            }catch (Exception e){}
//        }
        shardingTableService.createTable(new SysMenu());
    }

    /**
     * 根据model类生成对应的example文件
     */
    @Test
    public void createExample(){
        ExampleBuilderUtil.buildExampleFile(MiProperties.class);
    }

}
